package common;

import java.io.*;
import java.util.*;

public class FileList {   
	
    public static int parent_cnt = 1;
    public static int child_cnt = 1;

    public static void visitAllDirsAndFiles(File dir,HashMap map_child,HashMap map_parent) {
        try{

            if (dir.isDirectory()) {
                String[] children = dir.list();
                for (int i=0; i<children.length; i++) {
                    File files = new File(dir, children[i]);                   
                    
                     String ch_id = files.getAbsoluteFile().toString();
                     map_child.put(ch_id,child_cnt);
                     child_cnt++;                   

                    visitAllDirsAndFiles(files,map_child,map_parent);                    
                }
            }
        }catch(Exception e){
           e.printStackTrace();
       }
    }

    public static void visitAllDirs(File dir,HashMap map_parent) {

        if (dir.isDirectory()) {
             String pa_id = dir.getAbsoluteFile().toString();
             map_parent.put(pa_id,parent_cnt);
             
             parent_cnt++;                
            

            String[] children = dir.list();
            for (int i=0; i<children.length; i++) {
                visitAllDirs(new File(dir, children[i]),map_parent);
            }
        }
    }
    
    /**
     * file을 포함하고 그 서브 디렉토리 파일들을 모두 삭제 하는 함수...
     * 지우고자 하는 파일이나 디렉토리가 file일때 이 함수를 호출하면 서브 파일
     * 디렉토리를 모두 지워준다.
     * @param file
     */
    public static void deleteWidthSubThings(File file) {
     if (file.isDirectory()) {
      if (file.listFiles().length != 0) {
       File[] fileList = file.listFiles();
       for (int i = 0; i < fileList.length; i++) {

        // 디렉토리이고 서브 디렉토리가 있을 경우 리커젼을 한다...
        deleteWidthSubThings(fileList[i]);
        file.delete();
       }
      } else {

       // 파일 트리의 리프까지 도달했을때 삭제...
       file.delete();
      }
     } else {

      // 파일 일 경우 리커젼 없이 삭제...
      file.delete();
     }
    }
    
}
